//package cn.wolfcode.web.interceptor;
//
//import cn.wolfcode.domain.Employee;
//import cn.wolfcode.qo.JSONResult;
//import cn.wolfcode.util.RequiredPermission;
//import cn.wolfcode.util.UserContext;
//import com.alibaba.fastjson.JSON;
//import org.springframework.util.StringUtils;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.method.HandlerMethod;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.List;
//
//public class PermissionInterceptor implements HandlerInterceptor {
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        // 1.获取当前登录用户
//        Employee employee = UserContext.getCurrentUser();
//        // 2.是否是超级管理员
//            // 是->放行
//            // 不是->3
//        if (employee.isAdmin()){
//            return true;
//        }
//        // 3.获取当前要执行的处理方法(被拦截的方法)
//        if (!(handler instanceof HandlerMethod)){
//            return true;
//        }
//        HandlerMethod method = (HandlerMethod) handler;
//        RequiredPermission annotation = method.getMethodAnnotation(RequiredPermission.class);
//        // 4.判断是否有贴自定义注解
//        if (annotation == null){
//            // 否->放行
//            return true;
//        }
//        // 是->5
//        // 5.获取方法的权限表达式
//        //String expression = annotation.expression();
//        String simpleName = method.getBean().getClass().getSimpleName().replace("Controller", "");
//        String expression = StringUtils.uncapitalize(simpleName) + ":" + method.getMethod().getName();
//
//        // 6.获取当前用户拥有的权限表达式集合
//        List<String> list = UserContext.getExpressions();
//        // 7.判断用户拥有的权限表达式集合是否包含该方法的权限表达式
//        if (list.contains(expression)){
//            // 包含->放行
//            return true;
//        }
//        if (!method.hasMethodAnnotation(ResponseBody.class)){
//            // 不包含->不放行, 跳到错误页面
//            request.getRequestDispatcher("/WEB-INF/views/common/nopermission.ftl").forward(request, response);
//        } else {
//            JSONResult result = new JSONResult(false, "你没有权限操作");
//            response.setContentType("application/json;charset=utf-8");
//            response.getWriter().print(JSON.toJSONString(result));
//        }
//        return false;
//    }
//}
//
//
